package com.csi.bumblebee.service;

import com.csi.bumblebee.domain.user.Student;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * student表
 *
 * @author HUOJT
 */
public interface StudentService {

    /**
     * 注册学生用户
     *
     * @param student 学生对象
     * @return 是否成功注册
     */
    boolean register(Student student);

    /**
     * 学生账号登录
     *
     * @param student 学生对象
     * @return 学生账号
     */
    Student login(Student student);

    /**
     * 修改学生信息
     *
     * @param student 学生对象（修改后）
     * @return 是修改学生账号状态是否成功
     */
    boolean updateInfo(Student student);

    /**
     * 修改学生账号状态
     *
     * @param student 学生对象（修改后）
     * @return 是否修改成功
     */
    boolean updateStatus(Student student);

    /**
     * 得到student的基本业务信息（分页）
     *
     * @param pageNum  分页页码
     * @param pageSize 每页大小
     * @param student  学生对象，承载筛选条件
     * @return student列表
     */
    PageInfo<Student> listInfo(int pageNum, int pageSize, Student student);

    /**
     * 查询指定id的学生
     *
     * @param id 学生id
     * @return 学生对象
     */
    Student findByStudentId(String id);

    /**
     * 删除指定id的学生
     *
     * @param id 学生id
     * @return 删除指定id学生是否成功
     */
    boolean deleteByStudentId(String id);

    /**
     * 学查询生有多少偏好岗位
     *
     * @param id 学生id
     * @return 偏好岗位个数
     */
    int hasJobType(String id);

    /**
     * 查询学生参加指定岗位的测试的次数
     *
     * @param student 学生对象
     * @return 学生参加指定岗位的测试的次数
     */
    int countJobExam(Student student);

    /**
     * 根据姓名查用户
     * @param username 用户名
     * @return Student对象
     */
    Student findByName(String username);

    /**
     * 展示所有的学生账号
     * @return List<Student>
     */
    List<Student> listStudentAccount();

    /**
     * 封禁学生账号
     * @param id 学生Id
     * @return 影响行数
     */
    int bStudentAccount(String id);

    /**
     * 删除一个学生账号
     * @param id 主键Id
     * @return 影响行数
     */
    int delete(String id);

    /**
     * 展示所有封禁的账号
     * @return List<Student>
     */
    List<Student> listStudentBlackAccount();

    /**
     * 解封账号
     * @param id 学生主键Id
     * @return 影响行数
     */
    int releaseAccount(String id);

    /**
     * 展示所有已注销的账号
     * @param currentPage 当前页
     * @param perPageSize 每页的数据大小
     *
     * @return List<Student>
     */
    PageInfo<Student> listCanceledAccount(int currentPage, int perPageSize);

    /**
     * 后台注销账号
     * @param id 主键Id
     * @return 影响行数
     */
    int cancelAccount(String id);

    //查询学生岗位偏好
    String findByIdJobType(String id);


}

